package cn.iocoder.yudao.module.station.controller.admin.cylinder.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
 * 钢瓶档案 Base VO，提供给添加、修改、详细的子 VO 使用
 * 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
 */
@Data
public class CylinderBaseVO {

    @Schema(description = "钢瓶编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶编码不能为空")
    private String cylinderCode;

    @Schema(description = "载体编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "载体编码不能为空")
    private String chipCode;

    @Schema(description = "钢瓶类型编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶类型编码不能为空")
    private Long cylinderTypeCode;

    @Schema(description = "钢瓶规格编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶规格编码不能为空")
    private Long cylinderModelCode;

    @Schema(description = "钢瓶规格", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶规格不能为空")
    private String gasCylinderSpeci;

    @Schema(description = "钢瓶制造日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶制造日期不能为空")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime makeTime;

    @Schema(description = "设计使用寿命（年）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "设计使用寿命（年）不能为空")
    private Integer serviceLife;

    @Schema(description = "强检周期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "强检周期不能为空")
    private Integer checkPeriod;

    @Schema(description = "设计报废时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "设计报废时间不能为空")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime designScrapTime;

    @Schema(description = "钢瓶皮重（KG）")
    private Double tareWeight;

    @Schema(description = "最大充装量（KG）")
    private Double maxFillWeight;

    @Schema(description = "使用登记状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "使用登记状态不能为空")
    private Integer useRegisterStatus;

    @Schema(description = "使用登记证编码")
    private String useRegisterCode;

    @Schema(description = "首次充装时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime fillFirstTime;

    @Schema(description = "最近一次充装部门编码")
    private String recentFillDeptCode;

    @Schema(description = "最近一次充装时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime recentFillTime;

    @Schema(description = "充装次数")
    private Integer fillAmount;

    @Schema(description = "最近一次检测机构编码")
    private Long recentCheckStationCode;

    @Schema(description = "最近一次检测机构名称", example = "芋艿")
    private String recentCheckStationName;

    @Schema(description = "最近一次检测时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "最近一次检测时间不能为空")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime recentCheckTime;

    @Schema(description = "检测批次号")
    private String recentCheckBatchCode;

    @Schema(description = "最近一次操作时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime recentOperateTime;

    @Schema(description = "下次检验时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime nextCheckTime;

    @Schema(description = "钢瓶图片")
    private String cylinderPics;

    @Schema(description = "钢瓶状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotNull(message = "钢瓶状态不能为空")
    private Integer cylinderStatus;

    @Schema(description = "迁移解绑状态")
    private Integer transferFlag;

    @Schema(description = "备注", example = "随便")
    private String remark;

    @Schema(description = "当前钢瓶流传节点", example = "2")
    private Integer lastNodeType;

    @Schema(description = "最后操作时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime lastFlowTime;

    @Schema(description = "最后位置")
    private String lastPosition;

    @Schema(description = "钢瓶状态", example = "2")
    private Integer weightStatus;

    @Schema(description = "钢瓶规格编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶规格编码不能为空")
    private Integer gasCylinderSpeciNum;

    @Schema(description = "停用id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20662")
    @NotNull(message = "停用id不能为空")
    private Long stopId;

    @Schema(description = "投用状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotNull(message = "投用状态不能为空")
    private Long useStatus;

    @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11255")
    @NotNull(message = "部门id不能为空")
    private Long stationId;

    @Schema(description = "二维码地址", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "二维码地址不能为空")
    private String barcode;

    @Schema(description = "钢瓶制造厂家编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "钢瓶制造厂家编码不能为空")
    private Long factoryCode;

    @Schema(description = "钢瓶制造厂家名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
    @NotNull(message = "钢瓶制造厂家名称不能为空")
    private String factoryName;

    @Schema(description = "充装介质编码", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "充装介质编码不能为空")
    private Long mediumCode;

    @Schema(description = "充装介质名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
    @NotNull(message = "充装介质名称不能为空")
    private String mediumName;

}
